package com.weai.config;

import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * DeepSeek模型配置类
 * 负责配置与DeepSeek大模型的连接参数和Bean
 */
@Configuration
public class DeepSeekConfig {

    /**
     * DeepSeek API地址
     */
    @Value("${ai.model.deepseek.url}")
    private String apiUrl;

    /**
     * DeepSeek API密钥
     */
    @Value("${ai.model.deepseek.api-key}")
    private String apiKey;

    /**
     * DeepSeek模型名称
     */
    @Value("${ai.model.deepseek.model-name}")
    private String modelName;

    /**
     * 最大对话记忆轮数
     */
    @Value("${ai.model.deepseek.max-history:10}")
    private Integer maxHistory;

    /**
     * 温度参数（控制随机性）
     */
    @Value("${ai.model.deepseek.temperature:0.7}")
    private Double temperature;

    /**
     * 最大生成Token数
     */
    @Value("${ai.model.deepseek.max-tokens:2000}")
    private Integer maxTokens;
    
    /**
     * 配置OpenAI类型的Chat模型（与DeepSeek兼容）
     * DeepSeek遵循OpenAI的API规范，因此可以使用OpenAI的客户端
     * 
     * @return 配置好的ChatLanguageModel实例
     */
    @Bean
    public ChatLanguageModel deepSeekChatModel() {
        return OpenAiChatModel.builder()
                .baseUrl(apiUrl)
                .apiKey(apiKey)
                .modelName(modelName)
                .temperature(temperature)
                .maxTokens(maxTokens)
                .logRequests(true)
                .logResponses(true)
                .build();
    }
    
    /**
     * 获取API地址
     * 
     * @return API地址
     */
    public String getApiUrl() {
        return apiUrl;
    }
    
    /**
     * 获取API密钥
     * 
     * @return API密钥
     */
    public String getApiKey() {
        return apiKey;
    }
    
    /**
     * 获取模型名称
     * 
     * @return 模型名称
     */
    public String getModelName() {
        return modelName;
    }
    
    /**
     * 获取最大对话历史记录数
     * 
     * @return 最大对话历史记录数
     */
    public Integer getMaxHistory() {
        return maxHistory;
    }
    
    /**
     * 获取温度参数
     * 
     * @return 温度参数
     */
    public Double getTemperature() {
        return temperature;
    }
    
    /**
     * 获取最大生成Token数
     * 
     * @return 最大生成Token数
     */
    public Integer getMaxTokens() {
        return maxTokens;
    }
} 